package com.gisuni.sddc.util;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * 字符串通用方法
 * @author	yanggy
 * @version	0.1
 *
 */
public class StringUtil {
	/**
	 * 判断字符串是否为空
	 * @param s 目标字符串
	 * @return
	 */
	public static boolean isNullOrEmpty(String s) {
		return (s == null) || s.trim().equals("");
	}
	
	/**
	 * 字符串左对齐(默认填充空格)
	 * @param s 目标字符串
	 * @param total 对齐后总长度
	 * @return
	 */
	public static String paddingLeft(String s, int total) {
		return paddingLeft(s, total, ' ');
	}
	
	/**
	 * 字符串左对齐(指定填充字符)
	 * @param s 目标字符串
	 * @param total 对齐后总长度
	 * @param c 填充字符
	 * @return
	 */
	public static String paddingLeft(String s, int total, char c) {
		String d = isNullOrEmpty(s) ? "" : s;
		int len = d.length();
		if (len >= total) {
			return d;
		}
		StringBuilder b = new StringBuilder();
		int n = total - len;
		do {
			b.append(c);
			--n;
		} while (n > 0);
		b.append(d);
		return b.toString();
	}
	
	/**
	 * 字符串右对齐(默认填充空格)
	 * @param s 目标字符串
	 * @param total 对齐后总长度
	 * @return
	 */
	public static String paddingRight(String s, int total) {
		return paddingRight(s, total, ' ');
	}
	
	/**
	 * 字符串右对齐(指定填充字符)
	 * @param s 目标字符串
	 * @param total 对齐后总长度
	 * @param c 填充字符
	 * @return
	 */
	public static String paddingRight(String s, int total, char c) {
		String d = isNullOrEmpty(s) ? "" : s;
		int len = d.length();
		
		if (len >= total) {
			return d;
		}
		StringBuilder b = new StringBuilder();
		b.append(d);
		int n = total - len;
		
		do {
			b.append(c);
			--n;
		} while (n > 0);
		return b.toString();
	}
	
	/**
	 * 将字符串数组以指定连接符拼成一个字符串
	 * @param join
	 * @param strAry
	 * @return
	 */
	public static String join(String join, String[] strAry) {
		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < strAry.length; i++) {
			if (i == (strAry.length - 1)) {
				sb.append(strAry[i]);
			} else {
				sb.append(strAry[i]).append(join);
			}
		}
		return new String(sb);
	}
	
	/**
	 * 判断字符串是否为数字
	 * @param str
	 * @return
	 */
	public static boolean isNumeric(String str) {
		Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]+");
		Matcher isNum = pattern.matcher(str);
		
		if (!isNum.matches()) {
			return false;
		}
		return true;
	}
	
	/**
	 * 转换字符串编码为utf-8
	 * @param s 目标字符串
	 * @param fromEncode 原始编码
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String encodeUTF8(String s, String fromEncode) throws UnsupportedEncodingException {
		return encode(s, fromEncode, "utf-8");
	}
	
	/**
	 * 转换字符串编码
	 * @param s 目标字符串
	 * @param fromEncode 原始编码
	 * @param toEncode 结果编码
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String encode(String s, String fromEncode, String toEncode) throws UnsupportedEncodingException {
		if (isNullOrEmpty(s) || isNullOrEmpty(fromEncode) || isNullOrEmpty(toEncode)) {
			return "";
		}
		return new String(s.getBytes(fromEncode), toEncode);
	}
	

	/**
	 * 保留n位小数
	 * @param f
	 * @param size
	 * @return
	 */
	public static float roundDecimal(float f, int n) {
		BigDecimal b = new BigDecimal(f);
		float f1 = b.setScale(n, BigDecimal.ROUND_HALF_UP).floatValue();
		return f1;
	}
	
	public static String error(String errorMessage)
    {
        return "{\"errorMessage\":\"" + errorMessage +"\"}";
    }
}